TD 8 : Modélisation
Modélisation conceptuelle avancée
L3 MIASHS |
| Année 2025 |
L’objectif de cette séance est de compléter des diagrammes E/A avec les outils vus en cours :
- entités faibles,
- spécialisation et contraintes de spécialisation,
- contraintes d’intégrité référentielle,
- contraintes inter-association.
Exercice (Supermarché : modèle miniature)
On étudie une partie du SI d’un supermarché concernant la mise en rayon des produits et on a collecté les informations suivantes :
- Chaque produit a un nom et un prix et appartient à une catégorie.
- Le supermarché a plusieurs rayons, un rayon étant caractérisé par un étage et un numéro de rangée.
- Les produits d’une même catégorie sont placés dans le même rayon, mais un rayon peut contenir des produits de plusieurs catégories.
Concevoir un diagramme E/A de ce SI. Vérifier que ce diagramme modélise toutes les informations fournies.
On distingue les entités :
- PRODUIT : nom, prix.
- RAYON : étage, numéro-rangée.
- CATEGORIE.
Puis les associations :
- appartient entre PRODUIT et CATEGORIE.
- est-placé entre CATEGORIE et RAYON.
Les cardinalités qui sont bien décrites par l’énoncé :
- 1:1 pour appartient du côté de PRODUIT.
- max n pour appartient du côté de CATEGORIE.
- max 1 pour est-placé du côté de CATEGORIE.
- max n pour est-placé du côté de RAYON.
Les cardinalités qui ne sont pas décrites par l’énoncé :
- min 0 ou 1 pour appartient du côté de CATEGORIE.
- min 0 ou 1 pour est-placé du côté de CATEGORIE.
- min 0 ou 1 pour est-placé du côté de RAYON.
Un MCD possible avec cardinalité est :
Faut-il compléter le diagramme E/A ?
Le MCD proposé traduit complètement les spécifications de l’énoncé.
Exercice (Tournois)
Lors du dernier TP, vous avez étudié un SI portant sur des tournois.
Le diagramme E/A proposé est le suivant :
Il est décidé d’utiliser pour les identifiants des matchs la méthode suivante : pour un tournoi et un type de match (simple F, simple H, etc.) le match n°1 est la finale, les n°2 et 3 sont les demi-finales, etc.
Comment faut-il modifier le modèle ?
Il faut faire les modifications suivantes :
- MATCH devient une entité faible,
- appartient est une association faible identifiante entre TOURNOI (entité forte) et MATCH,
- de type est une association faible identifiante entre TYPE (entité forte) et MATCH,
- l’identifiant de MATCH devient : numéro_tournoi+type+numéro_match.
- les cardinalités sont inchangées ainsi que les autres associations auxquelles participent MATCH.
Y-a-t-il des contraintes d’intégrité fonctionnelle (CIF) ?
Pour rappel, les CIF concernent les liaisons de cardinalité maximale \(n\) dans les associations ternaires.
- si parmi les occurences de l’association \(A\), on a une dépendance fonctionnelle \(E_1 \rightarrow E_2\), on dit qu’on a une CIF \(E_1 \rightarrow E_2\) par rapport à \(A\).
- si parmi les occurences de l’association \(A\), on a une dépendance fonctionnelle \((E_1, E_2) \rightarrow E_3\), on dit qu’on a une CIF \((E_1,E_2) \rightarrow E_3\) par rapport à \(A\).
Par exemple, si on supposait qu’un joueur ne peut pas avoir deux entraineurs en même temps (ce qui n’est pas dit dans l’énoncé), on aurait une CIF (JOUEUR, DATE) \(\rightarrow\) ENTRAINEUR par rapport à l’association “est entrainé par”.
En reprenant la représentation du cours, on écrit :
Mais pour les CIF du type \((E_1, E_2) \rightarrow E_3\), le formalisme suivant est lisible :
Cette CIF dit la chose suivante : deux entraineurs différents ne peuvent pas commencer à entrainer un même joueur à la même date.
Est-ce que cette CIF suffit à décrire la totalité de la contrainte ? Que faut-il vérifier au-delà ?
Dans le dernier exemple de la question, la CIF ne suffit à traduire toute la contrainte car il faut vérifier que les périodes pendant lesquelles deux entrainteurs différents entraînent un même joueur sont disjointes, tandis que la CIF impose seulement que les débuts de ces deux périodes sont différents.
Pour le MCD de tournoi, il n’y a pas de CIF à ajouter. On les recherche sur les associations non binaires :
- est entrainé par : pas de CIF.
- recevoir gain : pas de CIF.
- de nationalité : on pourrait imaginer une CIF (JOUEUR, DATE) \(\rightarrow\) PAYS mais un joueur peut avoir simultanément plusieurs nationalités.
Pour la composition des matchs, on pouvait envisager trois solutions :
- Première solution : Une association «participer» indique les compositions des matches. Une association «gagner» indique le ou les gagnants (double).
- Seconde solution : une association «participer» portant une propriété prenant la valeur vrai ou faux selon que le joueur a gagné ou non.
- Troisième solution : deux associations «gagner» et «perdre».
Si on choisit la première ou la troisième solution, quelle contrainte faut-il ajouter ?
Parmi les trois solutions, lesquelles permettent de décrire complètement le SI ?
Pourquoi a-t-on choisi la deuxième solution ?
Il faut ajouter des contraintes inter-associations :
- Première solution : une contrainte d’inclusion entre gagner et participer.
- Troisième solution : une contrainte d’exlusion entre gagner et perdre.
Dans la deuxième solution, ces deux contraintes sont respectées sans ajout au modèle E/A. Cette solution est donc plus simple à implémenter.
Mais dans tous les cas, cela ne suffit pas à décrire toutes les contraintes du SI :
- dans un match simple, il y a exactement 1 gagnant et 1 perdant.
- dans un match double, il y a exactement 2 gagnants et 2 perdants.
Ces contraintes ne peuvent pas être décrites dans le modèle E/A étendu.
Exercice (Location de voitures)
On étudie une partie du SI d’une société de location de véhicules.
La société gère un parc de voiture. On a reccueilli les informations suivantes :
Chaque véhicule a une plaque d’immatriculation, une couleur, une marque et un modèle.
Un modèle a un nom, une marque, un nombre de sièges, un volume de chargement.
Chaque véhicule appartient obligatoirement à une et une seule catégorie qui détermine le tarif de la location.
Tous les véhicules du même modèle appartiennent à la même catégorie.
Ecrire le diagramme des dépendances fonctionnelles de ce SI (Voir la correction du TP précédent)
On a les dépéndances fonctionnelles suivantes :
On n’a pas représenté les dépendances indirectes indiquées dans l’énoncé qui se déduisent du diagramme par transitivité :
- id véhicules \(\rightarrow\) marque.
- id véhicules \(\rightarrow\) catégorie.
A l’aide du diagramme précédent, écrire le diagramme E/A de ce SI.
On déduit du diagramme des dépendances fonctionnelles le MCD suivant :
On veut maintenant distinguer les véhicules disponibles des véhicules en location :
- Pour les véhicules disponibles, on enregistre l’agence où le véhicule est disponible. Une agence a un numéro, une adresse, un numéro de téléphone, un email…
- Pour les véhicules en location, on enregistre le client, la date et la durée de la location. Un client a un numéro, une adresse, un numéro de téléphone, un email…
Compléter le diagramme E/A pour modéliser cette partie du SI.
Faut-il ajouter des contraintes ?
On ajoute 2 entités :
- AGENCE : attributs nunméro (identifiant), adresse, téléphone, email.
- CLIENT : attributs numéro (identifiant), adresse, téléphone, email.
Et 2 associations :
- est disponible entre VEHICULE et AGENCE.
- est loué entre VEHICULE et CLIENT : attributs date, durée.
Si on considère que le SI ne conserve pas l’historique des locations et des disponibilités, ou qu’on choisit de le faire par d’autres associations, on a les cardinalités 0:1 du côté de VEHICULE pour les deux associations.
On a alors aussi une contrainte de partitionnement entre les véhicules disponibles et les véhicules loués que l’on peut représenter complètement par une contrainte inter-association de totalité et d’exclusion entre les deux associations du côté de VEHICULE.
Maintenant, on s’intéresse à l’entretien des véhicules :
certains véhicules sont possédés par la société et sont entretenus chacun par un unique garage. Chaque garage a un numéro, un n°SIRET, une adresse, un IBAN, etc. On ne conserve pas l’historique des garages qui ont entretenu le véhicule.
les autres véhicules sont en leasing auprès de sociétés spécialisées dans ce type de location. Chaque société a un numéro, un n°SIRET, une adresse, un IBAN, etc.
- certains de ces véhicules sont entretenus par la société de leasing.
- les autres sont entretenus par la société de location dont on étudie le SI, selon le même principe que pour les véhicules qui lui appartiennent.
On essaie de modéliser cette partie du SI uniquement avec les entités VEHICULE, GARAGE, SOCIETE DE LEASING.
Proposer une ou des modélisations E/A et utiliser des contraintes pour décrire complètement le SI décrit.
Il faut essayer de traduire au mieux et le plus simplement possible la partition de l’ensemble des véhicules en 3 groupes :
- les véhicules possédés en propre qui doivent être entretenus par un garage.
- les véhicules en leasing sans entretien inclus qui doivent être entretenus par un garage.
- les véhicules en leasing avec entretien inclus qui ne doivent pas être entretenus par un garage.
Solution avec 2 associations binaires
- entretient entre GARAGE et VEHICULE.
- loue entre SOC LEASING et VEHICULE avec un attribut booléen pour enregistrer si l’entretien est inclus dans la location.
Cette solution a l’avantage de la simplicité et est proche de la pratique des utilisateurs (l’entretien par un garage est une option du leasing) mais le partitionnement n’est pas vérifiable facilement.
On peut représenter une contrainte de totalité entre les 2 associations par rapport à VEHICULE, mais on ne peut représenter la contrainte de partitionnement.
Solution avec 3 associations
- entretient entre GARAGE et VEHICULE.
- loue sans entretien entre SOC LEASING et VEHICULE pour le leasing sans entretien inclus.
- loue avec entretien entre SOC LEASING et VEHICULE pour le leasing avec entretien inclus.
Cette solution reste proche de la pratique des utilisateurs et permet de représenter fidèlement la contrainte de partitionnement mais les 3 contraintes sont complexes à vérifier.
Conclusion : on peut inventer d’autres solutions mais aucune n’est bien satifsfaisante.
Comme les solutions précédentes ne sont pas très satisfaisante, on décide d’utiliser des spécialisations de l’entité VEHICULE.
Proposer un nouveau modèle E/A et compléter le pour décrire complètement le SI.
Avec des spécialisations, on peut représenter le SI de manière plus satisfaisante.
La traduction en MRD ne justifie pas la création d’une table pour chaque spécialisation si elles ne contiennent pas d’attributs propres.
On traduira le MCD en MRD ainsi :
- ajout à VEHICULE de 2 attributs booléens : entretien et leasing.
- La contrainte de partitionnement entre les spécialisations est équivalente à la contrainte (entretien ou leasing) = VRAI pour chaque ligne de la table. Elle est facile à coder en SQL et peu couteûse en calculs.
- Les 2 associations entretient de type 1 à plusieurs sont codées par l’ajout dans la table VEHICULE d’une seule clé étrangère garage qui référence le numéro du garage qui effectue l’entretien. Il faut coder la contrainte entretien \(\Leftrightarrow\) garage IS NOT NULL.
- Les 2 associations loue de type 1 à plusieurs sont codées par l’ajout dans la table VEHICULE d’une seule clé étrangère soc leasing qui référence le numéro de la société qui effectue le leasing. Il faut coder la contrainte leasing \(\Leftrightarrow\) soc leasing IS NOT NULL.
C’est finalement un modèle relationnel proche ou identique à celui obtenu par conversion du premier MCD de la question précédente avec 2 associations. Mais il représente mieux le SI et permet un meilleur travail.